// package site.hanzhe.cnCalendar;
//
// import com.fasterxml.jackson.core.type.TypeReference;
// import com.fasterxml.jackson.databind.ObjectMapper;
// import site.hanzhe.cnCalendar.pojo.CnCalendar;
// import site.hanzhe.cnCalendar.pojo.CnCalendarDTO;
// import site.hanzhe.cnCalendar.utils.CnGanZhi;
//
// import java.net.URI;
// import java.nio.charset.StandardCharsets;
// import java.nio.file.Files;
// import java.nio.file.Path;
// import java.util.Comparator;
// import java.util.HashSet;
// import java.util.List;
// import java.util.Set;
//
// /**
//  * 遍历JSON文件，通过节气推算天干地址
//  * JSON来源：https://github.com/hungtcs/traditional-chinese-calendar-database
//  * 经测试发现，min.json文件中的数据并不是100%正确，该类已废弃，例如：
//  * 2058.min.json 没有1月1号，导致后面计算出现偏差
//  * 2058.min.json 年份干支出现错误，数据不可靠，还是手动计算更加靠谱
//  *
//  * @author 张涵哲
//  * @since 2025-11-26 09:34
//  */
// @Deprecated
// public class CnCalendarMain2 {
//
//     public static final Set<String> SOLAR_TERM = new HashSet<>();
//     public static final ObjectMapper objectMapper = new ObjectMapper();
//
//     public static void main(String[] args) throws Exception {
//         // action1();
//         action2();
//     }
//
//     /**
//      * 以2025-12-31为基准，向前推导天干地支
//      *
//      * @author 张涵哲
//      * @since 2025-11-26 08:37
//      */
//     public static void action1() throws Exception {
//         // 20251231的天干地支
//         CnGanZhi monthGZ = new CnGanZhi("戊子");
//         CnGanZhi dayGZ = new CnGanZhi("甲戌");
//         ClassLoader classLoader = CnCalendarMain2.class.getClassLoader();
//         for (int i = 2025; i >= 1901; i--) {
//             URI jsonFileUri = classLoader.getResource("min/" + i + ".min.json").toURI();
//             byte[] bytes = Files.readAllBytes(Path.of(jsonFileUri));
//             String json = new String(bytes, StandardCharsets.UTF_8);
//             List<CnCalendarDTO> list = objectMapper.readValue(json, new TypeReference<>() {});
//             list.stream()
//                     .map(CnCalendarDTO::toCalendar)
//                     .sorted(Comparator.comparingInt(CnCalendar::getOrder).reversed())
//                     .forEach(item -> {
//                         // 月份天干地支
//                         String month = SOLAR_TERM.contains(item.getSolarTerm()) ? monthGZ.getAndPre() : monthGZ.get();
//                         item.setMonthGan(month.substring(0, 1));
//                         item.setMonthZhi(month.substring(1, 2));
//                         // 日辰天干地支
//                         String day = dayGZ.getAndPre();
//                         item.setDayGan(day.substring(0, 1));
//                         item.setDayZhi(day.substring(1, 2));
//                         System.out.println(item.toSimpleString());
//                     });
//         }
//     }
//
//     /**
//      * 以2026-01-01为基准，向后推导天干地支
//      *
//      * @author 张涵哲
//      * @since 2025-11-26 08:58
//      */
//     public static void action2() throws Exception {
//         // 20260101的天干地支
//         CnGanZhi monthGZ = new CnGanZhi("戊子");
//         CnGanZhi dayGZ = new CnGanZhi("乙亥");
//         ClassLoader classLoader = CnCalendarMain2.class.getClassLoader();
//         for (int i = 2026; i <= 2100; i++) {
//             URI jsonFileUri = classLoader.getResource("min/" + i + ".min.json").toURI();
//             byte[] bytes = Files.readAllBytes(Path.of(jsonFileUri));
//             String json = new String(bytes, StandardCharsets.UTF_8);
//             List<CnCalendarDTO> list = objectMapper.readValue(json, new TypeReference<>() {});
//             list.stream()
//                     .map(CnCalendarDTO::toCalendar)
//                     .sorted(Comparator.comparingInt(CnCalendar::getOrder))
//                     .forEach(item -> {
//                         // 月份天干地支
//                         String month = SOLAR_TERM.contains(item.getSolarTerm()) ? monthGZ.nextAndGet() : monthGZ.get();
//                         item.setMonthGan(month.substring(0, 1));
//                         item.setMonthZhi(month.substring(1, 2));
//                         // 日辰天干地支
//                         String day = dayGZ.getAndNext();
//                         item.setDayGan(day.substring(0, 1));
//                         item.setDayZhi(day.substring(1, 2));
//                         System.out.println(item.toSimpleString());
//                     });
//         }
//     }
//
//     static {
//         // 这12个节气，每个节气都会更换一次月份的天干地支
//
//         SOLAR_TERM.add("立春");
//         // SOLAR_TERM.add("雨水");
//         SOLAR_TERM.add("惊蛰");
//         // SOLAR_TERM.add("春分");
//         SOLAR_TERM.add("清明");
//         // SOLAR_TERM.add("谷雨");
//         SOLAR_TERM.add("立夏");
//         // SOLAR_TERM.add("小满");
//         SOLAR_TERM.add("芒种");
//         // SOLAR_TERM.add("夏至");
//         SOLAR_TERM.add("小暑");
//         // SOLAR_TERM.add("大暑");
//         SOLAR_TERM.add("立秋");
//         // SOLAR_TERM.add("处暑");
//         SOLAR_TERM.add("白露");
//         // SOLAR_TERM.add("秋分");
//         SOLAR_TERM.add("寒露");
//         // SOLAR_TERM.add("霜降");
//         SOLAR_TERM.add("立冬");
//         // SOLAR_TERM.add("小雪");
//         SOLAR_TERM.add("大雪");
//         // SOLAR_TERM.add("冬至");
//         SOLAR_TERM.add("小寒");
//         // SOLAR_TERM.add("大寒");
//     }
//
// }